iT邦幫忙

2023 iThome 鐵人賽

DAY 8
0
Software Development

我在 Spring Boot 3 裡面挖呀挖呀挖系列 第 8

Day07 - 常用註解-條件註解

  • 分享至 

  • xImage
  •  

Day07 - 常用註解-條件註解

前言

昨天介紹了宣告為配置類的@Configuration、@SpringBootConfiguration以及常用註冊組件的@Controller、 @Service、@Repository、@Component,今天將進一步介紹@ConditionOnXXX,在條件成立下才執行動作,就讓我們來看看吧

專案建立

創建day07_condition專案

一樣我們開專案後導入Spring Web場景
https://ithelp.ithome.com.tw/upload/images/20230923/20128084qaAHvQOlbw.png
https://ithelp.ithome.com.tw/upload/images/20230923/20128084vcoWjIidnh.png

類別準備

public class Employee {
    private String id;
    private String empName;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getEmpName() {
        return empName;
    }

    public void setEmpName(String empName) {
        this.empName = empName;
    }
}

引入第三方Jar

為了測試我們加載IBM MQ的套件

<!-- https://mvnrepository.com/artifact/com.ibm.mq/com.ibm.mq.allclient -->
<dependency>
    <groupId>com.ibm.mq</groupId>
    <artifactId>com.ibm.mq.allclient</artifactId>
    <version>9.3.3.1</version>
</dependency>

import第三方組件

@Import(MQChannelDefinition.class)
@SpringBootApplication
public class Day07ConditionApplication {
    SpringApplication.run(Day07ConditionApplication.class, args);
}

條件註解

@ConditionOnClass / @ConditionOnMissingClass

@ConditionOnClass指的是如果類路徑存在就觸發指定行為,相反的Annotation就是@ConditionOnMissingClass,我們來利用昨天MQChannelDefinition來作範例導入不同的Employee吧

@Configuration
public class AppConfig {

    @ConditionalOnClass(name = "com.ibm.mq.MQChannelDefinition")
    @Bean
    public Employee emp01(){
        return new Employee();
    }
    @ConditionalOnMissingClass( value = "com.ibm.mq.MQChannelDefinition")
    @Bean
    public Employee emp02(){
        return new Employee();
    }
    
}

https://ithelp.ithome.com.tw/upload/images/20230923/201280841WNiIaWNSV.png

@ContitionalOnBean / @ConditionOnMissingBean

@ContitionalOnBean如果Container中存在这个Bean(组件),就觸發指定行為,相反的Annotation就是@ConditionOnMissingBean

//AppConfig再加入這兩的Bean
@ConditionalOnBean(name = "emp01")
    @Bean
    public Employee emp03(){
        return new Employee();
    }
    @ConditionalOnMissingBean( name = "emp02")
    @Bean
    public Employee emp04(){
        return new Employee();
    }

https://ithelp.ithome.com.tw/upload/images/20230923/20128084e27bTHsiNl.png
將Maven引入的IBM MQ、@Import(MQChannelDefinition.class)註解掉再執行一次
https://ithelp.ithome.com.tw/upload/images/20230923/20128084BtLTVbXz3Y.png

Reference


上一篇
Day06 - 常用註解-組件註冊
下一篇
Day08 - 常用註解-屬性綁定
系列文
我在 Spring Boot 3 裡面挖呀挖呀挖31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言